package com.feather.common.data;

/**
 * @author flogyin
 */
public interface Column extends Meta {
	// IN,OUT,RETURN...
	short getType();

	void setType(short type);

	// java.sql.Types & db custom type
	int getDataType();

	void setDataType(int dataType);

	String getDataTypeName();

	void setDataTypeName(String dataTypeName);

	int getOrdinal();

	void setOrdinal(int ordinal);

	String getRemarks();

	void setRemarks(String remarks);

	boolean isNullable();

	void setNullable(boolean able);

	int getLength();

	void setLength(int length);

	int getPrecision();

	void setPrecision(int precision);

	short getScale();

	void setScale(short scale);

	short getRadix();

	void setRadix(short radix);

	String getDefault();

	void setDefault(String def);

	Column copy();
	// int getNumPrecRadix();
	// void setNumPrecRadix(int radix);

	// int getCharOctetLength();
	// void setCharOctetLength(int length);

	// int getDecimalDigits();
	// void setDecimalDigits(int digits);

	// boolean isPrimaryKey();
	// void setPrimaryKey(boolean isPK);
}

/*
 * 仅返回与模式、过程和参数名称标准匹配的描述。它们根据 PROCEDURE_SCHEM 和 PROCEDURE_NAME
 * 进行排序。在此排序中，返回值（如果有）排在最前面。接着是参数描述，它们按调用顺序排序。然后是列描述，它们按列编号顺序进行排序。
 * 
 * ResultSet 中的每个行都是带以下字段的参数描述或列描述：
 * 
 * 1.PROCEDURE_CAT String => 过程类别（可为 null） 2.PROCEDURE_SCHEM String => 过程模式（可为
 * null） 3.PROCEDURE_NAME String => 过程名称 4.COLUMN_NAME String => 列/参数名称
 * 5.COLUMN_TYPE Short => 列/参数的种类： ◦procedureColumnUnknown - 没人知道
 * ◦procedureColumnIn - IN 参数 ◦procedureColumnInOut - INOUT 参数
 * ◦procedureColumnOut - OUT 参数 ◦procedureColumnReturn - 过程返回值
 * ◦procedureColumnResult - ResultSet 中的结果列 6.DATA_TYPE int => 来自 java.sql.Types
 * 的 SQL 类型 7.TYPE_NAME String => SQL 类型名称，对于 UDT 类型，类型名称是完全限定的 8.PRECISION int
 * => 精度 9.LENGTH int => 数据的长度，以字节为单位 10.SCALE short => 标度 11.RADIX short => 基数
 * 12.NULLABLE short => 是否可以包含 NULL。 ◦procedureNoNulls - 不允许使用 NULL 值
 * ◦procedureNullable - 允许使用 NULL 值 ◦procedureNullableUnknown - 不知道是否可使用 null
 * 13.REMARKS String => 描述参数/列的注释 注：有些数据库可能不为过程返回列描述。REMARKS 以外的其他列可由数据库定义。
 * 
 * 
 * 参数： catalog - 类别名称，因为存储在数据库中，所以它必须匹配类别名称。该参数为 "" 则检索没有类别的描述，为 null
 * 则表示该类别名称不应用于缩小搜索范围 schemaPattern - 模式名称的模式，因为存储在数据库中，所以它必须匹配模式名称。该参数为 ""
 * 则检索那些没有模式的描述，为 null 则表示该模式名称不应用于缩小搜索范围 procedureNamePattern -
 * 过程名称模式，因为存储在数据库中，所以它必须匹配过程名称 columnNamePattern - 列名称模式，因为存储在数据库中，所以它必须匹配列名称
 * 返回： ResultSet - 每一行都描述一个存储过程参数或列 抛出： SQLException - 如果发生数据库访问错误
 */